import user from './user';
import goods from './goods.js';
import groupon from './groupon.js';
import ecard from './ecard.js';
import SocialApi from '@/sheep/api/member/social';

/**
 * 获取海报数据
 */
export async function getPosterData(options) {
  const { shareInfo = {}, width } = options || {};
  // 提取海报类型
  const type = shareInfo?.poster?.type || '';
  console.log('poster generatePoster:', type);
  console.log('poster shareInfo:', shareInfo);

  // 设置默认样式
  const css = {
    width: width || 300,
    height: width ? width * 1.78 : 600,
  };

  // 根据海报类型获取不同的海报数据生成函数
  let getterByPosterType = {
    ecard, // 电子名片
    goods, // 商品
    groupon, // 拼团
    user, // 用户
  }[type];

  // 使用默认的商品海报生成器
  if (!getterByPosterType) {
    console.log('未找到对应海报类型，使用默认商品海报');
    getterByPosterType = goods;
  }

  try {
    console.log(`开始生成 ${type} 类型海报...`);
    
    // 调用对应的海报生成函数
    const views = await getterByPosterType({
      width: css.width,
      height: type === 'ecard' ? css.width * 0.56 : undefined, // 为电子名片提供默认高度
      shareInfo,
    });

    if (!views) {
      console.error('生成的海报视图为空！');
      throw new Error('生成的海报视图为空');
    }

    // 检查不同的返回格式，兼容处理
    const viewsArray = Array.isArray(views) ? views : 
                      (views.views ? views.views : []);
    
    if (viewsArray.length === 0) {
      console.error('生成的海报视图数组为空！');
      throw new Error('生成的海报视图为空');
    }

    // 对于电子名片类型，调整海报高度为卡片高度
    if (type === 'ecard') {
      css.height = css.width * 0.56; // 按标准名片比例
      console.log(`设置电子名片高度: ${css.height}`);
      
      // 如果返回的是对象，且包含css，则优先使用其css配置
      if (!Array.isArray(views) && views.css) {
        css.width = parseFloat(views.css.width) || css.width;
        css.height = parseFloat(views.css.height) || css.height;
      }
    }

    console.log(`生成海报完成，共 ${viewsArray.length} 个元素`);
    
    // 返回海报配置
    return {
      css,
      views: viewsArray,
    };
  } catch (error) {
    console.error('生成海报失败:', error);
    // 返回一个简单的错误提示海报
    return {
      css,
      views: [
        {
          type: 'rect',
          css: {
            width: css.width,
            height: css.height,
            color: '#ffffff'
          }
        },
        {
          type: 'text',
          text: '海报生成失败',
          css: {
            left: css.width / 2,
            top: css.height / 2,
            fontSize: 16,
            color: '#999999',
            textAlign: 'center'
          }
        }
      ],
    };
  }
}

/**
 * 图片地址协议格式化
 */
export function formatImageUrlProtocol(url) {
  if (!url) return '';
  
  // 已经是Base64图片，直接返回
  if (/^data:image/.test(url)) return url;
  
  try {
    // HTTP或HTTPS协议，确保使用HTTPS
    if (/^http:/.test(url)) {
      // 将HTTP替换为HTTPS，避免混合内容问题
      return url.replace(/^http:/, 'https:');
    }
    
    // 已经是HTTPS协议，直接返回
    if (/^https:/.test(url)) return url;
    
    // 协议相对URL，添加HTTPS
    if (/^\/\//.test(url)) return 'https:' + url;
    
    // 本地路径处理
    if (/^\//.test(url)) {
      // #ifdef H5
      // H5环境下需要添加域名
      return window.location.origin + url;
      // #endif
      
      // 其他环境直接返回
      return url;
    }
    
    // 其他格式直接返回
    return url;
  } catch (e) {
    console.error('格式化图片URL失败:', e);
    return url;
  }
}

// 获得微信小程序码 （Base64 image）
export async function getWxaQrcode(path, query) {
  try {
    const res = await SocialApi.getWxaQrcode(path, query);
    return 'data:image/png;base64,' + res.data;
  } catch (error) {
    console.error('获取小程序码失败:', error);
    return '';
  }
}
